home *** CD-ROM | disk | FTP | other *** search
/ The 640 MEG Shareware Studio 2 / The 640 Meg Shareware Studio CD-ROM Volume II (Data Express)(1993).ISO / rbbs / rbbs_mpl.zip / ANSICHAT.BAS < prev    next >
BASIC Source File  |  1992-07-05  |  8KB  |  233 lines

  1. ' $title: 'ANSIChat Split Screen Chat for RBBS-PC v17.4'
  2. '          By Dan Drinnon 8:903/2 1:313/6
  3. '
  4. '          DO NOT Distribute in Modified Form!
  5. '
  6. ' Revisions: 1.01 - added support to handle Sysop's Shell to DOS (F2)
  7.  
  8. '            1.02 - Prevent F10 from Loading another ANSIChat
  9. '                   Keep ANSIChat from showing 'RBBS' if that is already
  10. '                   part of the BBS name.
  11. '                   added support for Sysop's PgUp/PgDn (RBBSSUB3.BAS)
  12. '                   combined local and remote input routines
  13. '
  14. '
  15. ' $INCLUDE: 'RBBS-VAR.MOD'
  16. '
  17. ' $SUBTITLE: 'ANSIChat - ANSI Split Screen Chat Routine'
  18. '
  19. ' $PAGE
  20. '
  21. '  SUBROUTINE NAME    -- ANSIChat
  22. '
  23. '  INPUT PARAMETERS   -- None
  24. '
  25. '  OUTPUT PARAMETERS  -- None
  26. '
  27. '  SUBROUTINE PURPOSE -- Allows Split Screen ANSI Chat for RBBS
  28. '
  29. '
  30. DIM ZANSIRow(1), ZANSICol(1), ACColor$(1), HoldInput$(1), StartRow(1)
  31. DIM MaxRow(1), WasX$(1)
  32.  
  33. Common Shared ZANSIRow(), ZANSICol(), ACColor$(), HoldInput$(), StartRow()
  34. Common Shared MaxRow(), WasX$()
  35. Common Shared LocalOut, RemoteOut, SideOut
  36. '
  37. 1000 SUB ANSIChat STATIC
  38. '
  39.      LocalOut = 0
  40.      RemoteOut = 1
  41.      SideOut = LocalOut
  42.      ZANSIRow(LocalOut) = 2
  43.      ZANSIRow(RemoteOut) = 14
  44.      ZANSICol(LocalOut) = 1
  45.      ZANSICol(RemoteOut) = 1
  46.      ACColor$(LocalOut) = ZFG1$
  47.      ACColor$(RemoteOut) = ZFG2$
  48.      ZWasCM = ZTrue
  49.      TimeChatStarted! = TIMER
  50.      ZSubParm = 1
  51.      HoldColorReset$ = ZColorReset$
  52.      IF ZFG7$ = "" THEN ZFG7$ = ZEscape$ + "[1;33;44m"
  53.      IF ZFGF$ = "" THEN ZFGF$ = ZEscape$ + "[1;36;44m"
  54.      ZColorReset$ = ZFGF$
  55.      CALL ANSIMenu
  56.      CALL ANSILocate (ZANSIRow(LocalOut),ZANSICol(LocalOut))
  57.      CALL QuickTPut1 (ACColor$(LocalOut) + ZSysopGreeting$)
  58.      CALL SplitScreenChat
  59.      ZWasCM = 0
  60.      CALL CheckTime(TimeChatStarted!,Elapsed!, 2)
  61.      ZSecsPerSession! = ZSecsPerSession! + Elapsed!
  62.      IF NOT ZLocalUser THEN _
  63.         ZAutoLogoff! = TIMER + ZWaitBeforeDisconnect
  64.      CALL ClearANSIScreen
  65.      CALL QuickTPut(ZCrLF$ + "Chat over.  BBS resuming",2)
  66.      ZColorReset$ = HoldColorReset$
  67.      END SUB
  68. '
  69. 4000 SUB ANSIMenu STATIC
  70. '
  71.      LineBar$ = ""
  72.      FOR I= 1 to 80
  73.         LineBar$="▒" + LineBar$
  74.      NEXT I
  75.      CALL ClearANSIScreen
  76.      CALL ANSILocate (1,1)
  77.      CALL QuickTPut (ZFGF$ + LineBar$,0)
  78.      IF INSTR(ZRBBSName$,"BBS") <> 0 THEN _                          ' 1.02
  79.         ZOutTxt$ = "░*>>> " + ZRBBSName$ + " ANSI Chat <<<*░" _      ' 1.02
  80.      ELSE _                                                          ' 1.02
  81.         ZOutTxt$ = "░*>>> " + ZRBBSName$ + " RBBS ANSI Chat <<<*░"   ' 1.02
  82.      temppos = (40 - (LEN(ZOutTxt$)/2))
  83.      CALL ANSILocate (1,temppos)
  84.      CALL QuickTPut (ZFG7$ + ZOutTxt$,0)
  85.      CALL ANSILocate (13,1)
  86.      CALL QuickTPut (ZFGF$ + LineBar$,0)
  87.      CALL ANSILocate (13,3)
  88.      CALL QuickTPut (ZFGF$ + "░" + ZSysopFirstName$ + " " + ZSysopLastName$ + "░",0)
  89.      CALL ANSILocate (13,43)
  90.      CALL QuickTPut (ZFGF$ + "░" + ZActiveUserName$ + "░",0)
  91.      CALL Line25
  92.      END SUB
  93. '
  94. 5000 SUB ClearANSIScreen STATIC
  95. '
  96.      CALL QuickTPut ("",0)
  97.      ZSubParm = 2
  98.      CALL Line25
  99.      ZSubParm = 0
  100.      CALL ANSILocate (1,1)
  101.      END SUB
  102. '
  103. 6000 SUB ANSILocate (ANSIRow,ANSICol) STATIC
  104. '
  105.      CALL QuickTPut ("" + MID$(STR$(ANSIRow),2) + ";" + MID$(STR$(ANSICol),2) + "H",0)
  106.      END SUB
  107. '
  108. 8000 SUB SplitScreenChat STATIC
  109. '
  110. 8001 HoldInput$(LocalOut) = ""                                       ' 1.01
  111.      HoldInput$(RemoteOut) = ""
  112.      MaxLen = 78
  113.      StartRow(LocalOut) = 2
  114.      StartRow(RemoteOut) = 14
  115.      MaxRow(LocalOut) = 12
  116.      MaxRow(RemoteOut) = 24
  117.      ZANSICol(LocalOut) = 1
  118.      ZANSICol(RemoteOut) = 1
  119.      ZANSIRow(LocalOut) = StartRow(LocalOut) + 1
  120.      ZANSIRow(RemoteOut) = StartRow(RemoteOut)
  121.      WasX$(LocalOut) = ""
  122.      WasX$(RemoteOut) = ""
  123.      ZWaitExpired = ZFalse
  124. '
  125. 8010 ZAutoLogoff! = TIMER + ZWaitBeforeDisconnect
  126.      CALL Carrier
  127.      IF ZSubParm < 0 THEN _
  128.         EXIT SUB
  129. '
  130. 8020 CALL FindFKey
  131.      IF ZWasCM = 0 THEN _                                            ' 1.01
  132.         CALL FlushCom (ZCommPortStack$) : _                          ' 1.01
  133.         ZKeyPressed$ = "" : _                                        ' 1.01
  134.         CALL ANSIMenu : _                                            ' 1.01
  135.         ZWasCM = ZTrue : _                                           ' 1.01
  136.         StartLocalRow = 1 : _                                        ' 1.01
  137.         GOTO 8001                                                    ' 1.01
  138.      SideOut = LocalOut
  139.      WasX$(LocalOut) = ZKeyPressed$
  140.      IF ZKeyPressed$ = ZEscape$ THEN _
  141.         EXIT SUB
  142.      IF WasX$(LocalOut) <> "" THEN _
  143.         GOTO 8060
  144. '
  145. 8030 IF ZLocalUser THEN _
  146.         GOTO 8010
  147.      SideOut = RemoteOut
  148.      IF ZCommPortStack$ <> "" THEN _
  149.         WasX$(RemoteOut) = LEFT$(ZCommPortStack$,LEN(ZCommPortStack$)-1) : _
  150.         GOTO 9000
  151.      CALL EofComm (Char)
  152.      IF Char <> -1 THEN _
  153.         GOTO 8050 _
  154.      ELSE _
  155.         GOTO 8010
  156. '
  157. 8050 ZAutoLogoff! = TIMER + ZWaitBeforeDisconnect
  158.      SideOut = RemoteOut
  159.      CALL GetCom (WasX$(RemoteOut))
  160. '
  161. 8060 'Control keys
  162.      IF WasX$(SideOut) = CHR$(8) THEN _
  163.         GOTO 8500 _
  164.      ELSE IF WasX$(SideOut) = CHR$(9) THEN _
  165.         GOTO 8510 _
  166.      ELSE IF WasX$(SideOut) = CHR$(13) THEN _
  167.         GOTO 8520
  168.      GOTO 9000
  169. '
  170. 8500 'BackSpace
  171.      HoldInput$(SideOut) = ""
  172.      IF ZANSICol(SideOut) > 1 THEN _
  173.         ZANSICol(SideOut) = ZANSICol(SideOut) - 1
  174.      CALL ANSILocate (ZANSIRow(SideOut),ZANSICol(SideOut))
  175.      IF NOT ZLocalUser THEN _
  176.         CALL PutCom (" ")
  177.      CALL LPrnt (" ",0)
  178.      CALL ANSILocate (ZANSIRow(SideOut),ZANSICol(SideOut))
  179.      GOTO 8010
  180. '
  181. 8510 'TAB
  182.      HoldInput$(SideOut) = ""
  183.      IF ZANSICol(SideOut) + 5 > MaxLen THEN _
  184.         CALL AddRow (StartRow(SideOut),MaxRow(SideOut)) _
  185.      ELSE _
  186.         ZANSICol(SideOut) = ZANSICol(SideOut) + 5 : _
  187.         CALL ANSILocate (ZANSIRow(SideOut),ZANSICol(SideOut))
  188.      GOTO 8010
  189. '
  190. 8520 'CR
  191.      HoldInput$(SideOut) = ""
  192.      CALL AddRow (StartRow(SideOut),MaxRow(SideOut))
  193.      GOTO 8010
  194. '
  195. 9000 'Character Placement
  196.      HoldInput$(SideOut) = HoldInput$(SideOut) + WasX$(SideOut)
  197.      IF WasX$(SideOut) = " " THEN _
  198.         HoldInput$(SideOut) = ""
  199.      IF ZANSICol(SideOut) = MaxLen AND WasX$(SideOut) <> " " THEN _
  200.         CALL ANSILocate (ZANSIRow(SideOut),ZANSICol(SideOut) - LEN(HoldInput$(SideOut))) : _
  201.         CALL QuickTput("", 0) : _
  202.         CALL AddRow (StartRow(SideOut),MaxRow(SideOut)) : _
  203.         CALL QuickTPut (HoldInput$(SideOut),0) : _
  204.         ZANSICol(SideOut) = ZANSICol(SideOut) + LEN(HoldInput$(SideOut)) - 1 : _
  205.         WasX$(SideOut) = "" : _
  206.         HoldInput$(SideOut) = ""
  207.      CALL ANSILocate (ZANSIRow(SideOut),ZANSICol(SideOut))
  208.      IF NOT ZLocalUser THEN _
  209.         CALL PutCom (ACColor$(SideOut) + WasX$(SideOut))
  210.      CALL LPrnt (ACColor$(SideOut) + WasX$(SideOut),0)
  211.      ZANSICol(SideOut) = ZANSICol(SideOut) + 1
  212.      IF ZANSICol(SideOut) > MaxLen THEN _
  213.         CALL AddRow (StartRow(SideOut),MaxRow(SideOut))
  214.      WasX$(SideOut) = ""
  215.      GOTO 8010
  216.      END SUB
  217. '
  218. 10000 SUB AddRow (StartRow,MaxRow) STATIC
  219. '
  220.       ZANSICol(SideOut) = 1
  221.       ZANSIRow(SideOut) = ZANSIRow(SideOut) + 1
  222.       IF ZANSIRow(SideOut) > MaxRow THEN _
  223.          ZANSIRow(SideOut) = StartRow
  224.       IF ZANSIRow(SideOut) < MaxRow THEN _
  225.          CALL ANSILocate (ZANSIRow(SideOut) + 1,ZANSICol(SideOut)) : _
  226.          CALL QuickTput("", 0)
  227.       IF ZANSIRow(SideOut) = MaxRow THEN _
  228.          CALL ANSILocate (StartRow,ZANSICol(SideOut)) : _
  229.          CALL QuickTput("", 0)
  230.       CALL ANSILocate (ZANSIRow(SideOut),ZANSICol(SideOut))
  231.       END SUB
  232. '
  233.